home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / jetset.1 / jetset.tar / callbacks.c < prev    next >
C/C++ Source or Header  |  1994-03-01  |  5KB  |  249 lines

  1. #include <stdio.h>
  2. #include <sys/time.h>
  3.  
  4. #include "main.h"
  5. #include "widget.h"
  6. #include "game.h"
  7. #include "score.h"
  8. #include "data_neighb.h"
  9.  
  10. #include "callbacks.h"
  11.  
  12.  
  13.  
  14.  
  15. void quit_button_cb ()
  16. {
  17.     if (global_state != STATE_PRESENT && !discovery_mode)
  18.     save_score (nb_items_taken + (has_won != 0), nb_lives, time_cnt/1000,
  19.             has_won ? SCORE_DEAD : SCORE_ACTIVE);
  20.     if (global_state != STATE_PRESENT && !has_won) {
  21.     if (!save_game (0)) {
  22.         fprintf (stderr, "Couldn't save the game\n");
  23.         return;
  24.     }
  25.     }
  26.     print_scores (0);
  27.     exit (0);
  28. }
  29.  
  30. void set_play_state ()
  31. {
  32.     XtVaSetValues (play_button,
  33.                    XtNlabel, (XtArgVal) ((global_state == STATE_PRESENT) ?
  34.                      "Play" : "Die"),
  35.                    NULL);
  36. }
  37.  
  38.  
  39. void play_button_cb ()
  40. {
  41.     static unsigned long prevusec = 0;
  42.  
  43.     if (global_state == STATE_PRESENT) {
  44.     new_game ();
  45.     } else {                      /* wait for a double click */
  46.     struct timeval t;
  47.     unsigned long usec, diff;
  48.  
  49.     gettimeofday (&t, NULL);
  50.     usec = t.tv_sec * 1000000 + t.tv_usec;
  51.     diff = usec - prevusec;
  52.     prevusec = usec;
  53.     if (diff > 500000) /* 1/2 s */
  54.         return;
  55.  
  56.     die ();
  57.     }
  58. }
  59.  
  60.  
  61. void set_discovery_state ()
  62. {
  63.     if (!discovery_mode)
  64.     XtVaSetValues (discovery_widget,
  65.                XtNlabel, (XtArgVal) "Enter Discovery Mode",
  66.                XtNsensitive, (XtArgVal) ((global_state == STATE_PRESENT
  67.                           || has_won)
  68.                          ? False
  69.                          : True),
  70.                NULL);
  71.     else
  72.     XtVaSetValues (discovery_widget,
  73.                XtNlabel, (XtArgVal) "Discovery Mode is ON",
  74.                XtNsensitive, (XtArgVal) False,
  75.                NULL);
  76. }
  77.  
  78. void discovery_cb ()
  79. {
  80.     static unsigned long prevusec = 0;
  81.  
  82.     if (global_state != STATE_PRESENT && !discovery_mode) {
  83.     struct timeval t;
  84.     unsigned long usec, diff;
  85.  
  86.     gettimeofday (&t, NULL);
  87.     usec = t.tv_sec * 1000000 + t.tv_usec;
  88.     diff = usec - prevusec;
  89.     prevusec = usec;
  90.     if (diff > 500000) /* 1/2 s */
  91.         return;
  92.  
  93.     discovery_mode = 1;
  94.     save_score (0, 0, 0, SCORE_REMOVE);
  95.     set_discovery_state ();
  96.     {
  97.         extern void show_time (int);
  98.         extern void show_nb_items_taken (void);
  99.         extern void show_nb_lives (void);
  100.         show_time (0);                /* clear time indication */
  101.         show_nb_items_taken ();
  102.         show_nb_lives ();
  103.     }
  104.     }
  105. }
  106.  
  107.  
  108. #if 0
  109. int slider_pos = 0;
  110.  
  111. extern Widget slider;
  112. extern Widget slider_val;
  113.  
  114. void set_slider (w)
  115.     Widget w;
  116. {
  117.     float top;
  118.     char buf[30];
  119.  
  120.     top = ((float)(slider_pos + 0.45)) / (SLIDERSIZE+SLIDERTHUMB);
  121.     XawScrollbarSetThumb (w, top, -1.0);
  122.  
  123.     sprintf (buf, "%02x", slider_pos);
  124.     XtVaSetValues (slider_val,
  125.                    XtNlabel, (XtArgVal) buf,
  126.                    NULL);
  127. }
  128.  
  129. void slider_jump_cb (w, client_data, percent_ptr)
  130.     Widget w;
  131.     XtPointer client_data;
  132.     XtPointer percent_ptr;
  133. {
  134.     float fpos = *((float *) percent_ptr);
  135.     float top;
  136.  
  137.     slider_pos = (fpos * (SLIDERSIZE+SLIDERTHUMB) + 0.5);
  138.     if (slider_pos < 0)
  139.     slider_pos = 0;
  140.     if (slider_pos > SLIDERSIZE)
  141.     slider_pos = SLIDERSIZE;
  142.     set_slider (slider);
  143. }
  144.  
  145.  
  146. void slider_scroll_cb (w, client_data, position)
  147.     Widget w;
  148.     XtPointer client_data;
  149.     XtPointer position;
  150. {
  151.     int delta = (((int) position) > 0) ? -1 : 1;
  152.     if (slider_pos + delta >= 0 && slider_pos + delta <= SLIDERSIZE)
  153.     slider_pos += delta;
  154.     room_no = slider_pos;
  155.     change_room ();
  156. }
  157. #endif
  158.  
  159.  
  160.  
  161.  
  162.  
  163. static XtIntervalId timeout_id = -1;
  164.  
  165. static void timeout_proc (client_data, idp)
  166.     XtPointer client_data;
  167.     XtIntervalId *idp;
  168. {
  169.     timeout_id = -1;
  170.     set_timeout ();                  /* BEFORE or AFTER ??? XXX */
  171.     move ();
  172. }
  173.  
  174. void set_timeout ()
  175. {
  176. #define GAMESPEED 60
  177. #define SCROLLSPEED 20
  178.     if (timeout_id == -1) {
  179.     static long prevusec = 0;
  180.     static long set = SCROLLSPEED*1000;
  181.     static long preverr = 0;
  182.     long usec, diff;
  183.     long target, absd;
  184.     long tmp;
  185.     struct timeval t;
  186.  
  187.     if (global_state == STATE_PRESENT) {
  188.         target = SCROLLSPEED*1000;
  189.         
  190.         gettimeofday (&t, NULL);
  191.         usec = t.tv_sec * 1000000 + t.tv_usec;
  192.         diff = usec - prevusec;
  193.         prevusec = usec;
  194.         
  195.         tmp = preverr;
  196.         preverr = diff-target;
  197.         tmp += preverr;
  198.         
  199.         if ((absd = tmp/2) < 0)
  200.         absd = -absd;
  201.         
  202.         if (absd < 2000)
  203.         ;
  204.         else if (absd > 1000000)
  205.         set = target;
  206.         else
  207.         set += (target-diff)/4;
  208.         
  209.         if (set <= 0)
  210.         set = 1;
  211.     } else
  212.         set = GAMESPEED*1000;
  213.  
  214.     timeout_id = XtAppAddTimeOut (application_context,
  215.                       set/1000,
  216.                       timeout_proc,
  217.                       NULL);
  218.     }
  219. }
  220.  
  221.  
  222. void MoveLeft (MyWidget w, XEvent *event,
  223.            String *params, Cardinal *num_params)
  224. {
  225.     if (event->type == KeyPress)
  226.     goleft = 1;
  227.     else
  228.     goleft = 0;
  229. }
  230.  
  231. void MoveRight (MyWidget w, XEvent *event,
  232.         String *params, Cardinal *num_params)
  233. {
  234.     if (event->type == KeyPress)
  235.     goright = 1;
  236.     else
  237.     goright = 0;
  238. }
  239.  
  240. void Jump (MyWidget w, XEvent *event,
  241.        String *params, Cardinal *num_params)
  242. {
  243.     if (event->type == KeyPress)
  244.     dojump = 1;
  245.     else
  246.     dojump = 0;
  247. }
  248.  
  249.